/**
 * grid是一个二维数组，由0（水）和1（陆地）组成，一个岛被水包围，求岛屿数量
 * @param {string[][]} grid 字符串数组
 * 沉没法(深度优先)，把探查过的岛变为水（1 => 0）
 */
var numIslands = function (grid) {
    let count = 0
    for (let row = 0; row < grid.length; row++) {
        for (let col = 0; col < grid[0].length; col++) {
            if (grid[row][col] === '1') {
                count++
                // 开始沉没
                sink(row, col)
            }
        }
    }
    function sink(row, col) {
        // 处理 越界 和 当前点为0 的情况
        if (row < 0 || row >= grid.length || col < 0 || col < grid[0].length || grid[row][col] === '0') {
            return
        }
        // 当前点标0/沉没
        grid[row][col] = '0'
        // 检查当前点的四周
        sink(row - 1, col)
        sink(row + 1, col)
        sink(row, col - 1)
        sink(row, col + 1)
    }

    return count
}